package com.example.mislugares;

import java.text.DateFormat;
import java.util.Date;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.RatingBar.OnRatingBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;

public class VistaLugar extends Activity {
    private long id;
    private Lugar lugar;
    final static int RESULTADO_EDITAR= 1;
    final static int RESULTADO_GALERIA= 2;
    final static int RESULTADO_FOTO= 3;
    private Uri uriFoto;
    TextView distancia;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
		Toast.makeText(this, "V onCreate", Toast.LENGTH_SHORT).show();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.vista_lugar);     
        Bundle extras = getIntent().getExtras();
        id = extras.getLong("id", -1);
        this.actualizarVistas();
    }
    
    @Override
	protected void onStart(){
    	Toast.makeText(this, "V onStar", Toast.LENGTH_SHORT).show();
		super.onStart();
	}
    
    @Override
    protected void onResume (){
    	Toast.makeText(this, "V onResume", Toast.LENGTH_SHORT).show();
    	super.onResume();
    	this.actualizarVistas();
    }
    
    @Override
	protected void onPause(){
		Toast.makeText(this, "V onPause", Toast.LENGTH_SHORT).show();
		super.onPause();
	}
	
	@Override
	protected void onStop(){
		super.onStop();
		Toast.makeText(this, "V onStop", Toast.LENGTH_SHORT).show();
	}
		
	@Override
	protected void onDestroy(){
		super.onStop();
		Toast.makeText(this, "V onDestroy", Toast.LENGTH_SHORT).show();
	}
    
	
	
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
          getMenuInflater().inflate(R.menu.menuvistalugar, menu);            
          return true;
    }
    
    public void actualizarVistas(){
    	lugar = Lugares.elemento((int) id);
    	TextView nombre = (TextView) findViewById(R.id.nombre);
        nombre.setText(lugar.getNombre());
        
        ImageView imgtipo = (ImageView) findViewById(R.id.logo_tipo);
        imgtipo.setImageResource(lugar.getTipo().getRecurso());
        
        TextView tipo = (TextView) findViewById(R.id.tipo);
        tipo.setText(lugar.getTipo().getTexto());
        
        TextView direccion = (TextView) findViewById(R.id.direccion);
        direccion.setText(lugar.getDireccion());
           
        TextView telefono = (TextView) findViewById(R.id.telefono);
        telefono.setText(lugar.getTelefono().toString());
           
        TextView url = (TextView) findViewById(R.id.url);
        url.setText(lugar.getUrl());       
        
        TextView comentario = (TextView) findViewById(R.id.comentario);
        comentario.setText(lugar.getComentario());
        
        TextView fecha = (TextView) findViewById(R.id.fecha);
        fecha.setText(DateFormat.getDateInstance().format(
                           new Date(lugar.getFecha())));
        
        TextView hora = (TextView) findViewById(R.id.hora);
        hora.setText(DateFormat.getTimeInstance().format(
                           new Date(lugar.getFecha())));
        
        RatingBar valoracion = (RatingBar) findViewById(R.id.valoracion);
        valoracion.setRating(lugar.getValoracion());
        valoracion.setOnRatingBarChangeListener(
            new OnRatingBarChangeListener() {
                @Override public void onRatingChanged(RatingBar ratingBar,
                                                float valor, boolean fromUser) {
                    lugar.setValoracion(valor);
                }
        });
        ImageView foto = (ImageView) findViewById(R.id.foto);
        ponerFoto(foto, lugar.getFoto());
        
        distancia = (TextView) this.findViewById(R.id.distancia);
        //Log.d("LLEGOOOOOOOOOOOOO", "aqui");
        if (Lugares.posicionActual != null && lugar.getPosicion() != null) {
               int d = (int) Lugares.posicionActual.distancia(lugar.getPosicion());
               if(d < 2000) {
                     distancia.setText(d + " m");
               } else {
                     distancia.setText(d / 1000 + "Km");
               }
        }
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
          switch(item.getItemId()) {
          case R.id.accion_compartir:
        	  Intent intent = new Intent(Intent.ACTION_SEND);
              intent.setType("text/plain");
              intent.putExtra(Intent.EXTRA_TEXT,lugar.getNombre() + " - "+ lugar.getUrl());
              startActivity(intent);
              return true;
          case R.id.accion_llegar:
        	  verMapa(null);
              return true;  
          case R.id.accion_editar:
        	   editarElemento(item);
               return true;
          case R.id.accion_borrar:
               seguroBorrar(item);
               return true;
          default:
                 return super.onOptionsItemSelected(item);
          }     
    }
    
    public void editarElemento (MenuItem item){
	  	 Intent i = new Intent(this, EdicionLugar.class);
	  	 i.putExtra("id", id);
	  	 startActivityForResult(i, RESULTADO_EDITAR);
    }
    
    public void seguroBorrar(MenuItem item){
        new AlertDialog.Builder(this)
           .setTitle("¿Desea borrar?")
           .setMessage(lugar.getNombre())
           .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int whichButton) {
                   Lugares.borrar((int) id);
                   finish();
               }})

           .setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int whichButton) {
               }})
           .show();
    }     
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
           if (requestCode == RESULTADO_EDITAR) {
                 actualizarVistas();
                 findViewById(R.id.scrollView1).invalidate();
                 //Toast.makeText(this, "Hemos actualizado", Toast.LENGTH_SHORT).show();
           } else if (requestCode == RESULTADO_GALERIA && 
        	    resultCode == Activity.RESULT_OK) {
               lugar.setFoto(data.getDataString());
               ImageView foto = (ImageView) findViewById(R.id.foto);
               ponerFoto(foto, lugar.getFoto());
           } else if (requestCode == RESULTADO_FOTO && resultCode == Activity.RESULT_OK
        	        && lugar!=null && uriFoto!=null) {
       		   Toast.makeText(this, "foto tirada", Toast.LENGTH_SHORT).show();
               lugar.setFoto(data.getDataString());
               ImageView foto = (ImageView) findViewById(R.id.foto);
               ponerFoto(foto, lugar.getFoto());
           }
    }
    protected void ponerFoto(ImageView imageView, String uri) {
        if (uri != null) {
            imageView.setImageURI(Uri.parse(uri));
        } else{
            imageView.setImageBitmap(null);
        }
    }
    public void eliminarFoto(View view) {
        lugar.setFoto(null);
        ImageView foto = (ImageView) findViewById(R.id.foto);
        ponerFoto(foto, null);
    }
    public void tomarFoto(View view){
    	Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        startActivityForResult(intent, RESULTADO_FOTO);
    }
    public void verMapa(View view) {
        Uri uri;
        double lat = lugar.getPosicion().getLatitud();
        double lon = lugar.getPosicion().getLongitud();
        if (lat != 0 || lon != 0) {
               uri = Uri.parse("geo:" + lat + "," + lon);
        } else {
               uri = Uri.parse("geo:0,0?q=" + lugar.getDireccion());
        }
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
  }
    public void llamadaTelefono(View view) {
        startActivity(new Intent(Intent.ACTION_DIAL,
                               Uri.parse("tel:" + lugar.getTelefono())));
    }
    public void pgWeb(View view) {
        startActivity(new Intent(Intent.ACTION_VIEW,
                               Uri.parse(lugar.getUrl())));
    }
    public void galeria(View view) {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("image/*");
        startActivityForResult(intent, RESULTADO_GALERIA);
 }

}